package com.nengchuan.kbms.dfs.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nengchuan.kbms.common.IPageService;
import com.nengchuan.kbms.dfs.annotation.UserOperateLogger;
import com.nengchuan.kbms.dfs.entity.dto.DataFilePageDTO;
import com.nengchuan.kbms.dfs.entity.dto.DataFileUploadDTO;
import com.nengchuan.kbms.dfs.entity.dto.DownloadFileDTO;
import com.nengchuan.kbms.dfs.entity.po.DataFile;
import com.nengchuan.kbms.dfs.entity.vo.DataFileVO;
import com.nengchuan.kbms.dfs.entity.vo.FileDetailVO;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * <p>
 * 文件表 服务类
 * </p>
 *
 * @author abe
 * @since 2020-03-24
 */
public interface DataFileService extends IPageService<DataFile> {

    /**
     * 文件上传
     * @param uploadDTO 上传对象
     * @param inputStream 输入流
     * @return
     */
    DataFileVO uploadFile(DataFileUploadDTO uploadDTO, InputStream inputStream);

    /**
     * 文件下载
     * @param downloadFileDTO 文件入参
     * @param outputStream 输出流
     */
    void downloadFile(DownloadFileDTO downloadFileDTO, OutputStream outputStream);

    /**
     * 文件（夹）列表
     * @param pageDTO 查询条件
     * @return
     */
    IPage<DataFileVO> folderAndFilePage(DataFilePageDTO pageDTO);

    /**
     * 断言文件存在（不存在会抛出 NcException
     */
    DataFile assertFileExisted(Long fileId);

    String getSuffix(String fileName);

    String bytes4Human(long fileSize);

    /**
     * 获取文件详情
     */
    FileDetailVO getDetail(Long id);

    /**
     * 解析文件名
     */
    DataFileVO resolveFileName(MultipartFile file, String folderName) throws IOException;

}

